package io;

/**
 * java将流按照读写单位划分为字节流与字符流
 * 字节流:InputStream和OutputStream
 * 字符流:Reader和Writer
 * 字节流以byte为单位读写数据，字符流以char为单位读写数据
 *
 * 字符流都是高级流，并且字符流只能连接在其他字符流上。
 * 但这里就有一个矛盾点，高级流不能独立存在，最终一定是要连接在低级流上的，而低级流
 * 都是字节流，但是字符流又无法连接在字节流上(主要原因是它们读写的数据单位不同)，因此
 * 出现了转换流:
 * InputStreamReader和OutputStreamWriter。
 * 转换流是一对字符流，但是它们是唯一可以连接在字节流上的字符流，作用就是将读写的
 * 数据单位进行转换:字符与字节的转换
 * 因此实际开发中我们不直接操作这对流，但是在流连接中它们是重要的一环，起到"转换器"的作用
 */
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

public class OSWDemo {
    public static void main(String[] args) throws IOException {
        //向文件osw.txt写入文本数据
        FileOutputStream fos = new FileOutputStream("osw.txt");
        //创建转换流时通常明确字符集，避免跨平台带来的乱码
        OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);

//  传统的写入方法：
//        String line = "让我再看你一遍，从南到北。";
//        byte[] data = line.getBytes(StandardCharsets.UTF_8);
//        fos.write(data);
//        fos.write("像是被五环路蒙住的双眼。".getBytes(StandardCharsets.UTF_8));


        osw.write("你好呀，光头强。");
        osw.write("熊大，光头强来砍树了");
        System.out.println("写出完毕");
        osw.close();


    }
}
